﻿using CompanyManagement.Models;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;

namespace CompanyManagement.management
{
    public partial class CompanyTypes : System.Web.UI.Page
    {
        private CompanyTypeDAO companyTypeDao;
        
        public string FiltreOriginalClient { get; set; }

        public CompanyTypes(){
            companyTypeDao = new CompanyTypeDAO();
        }
        
        protected void Page_Load(object sender, EventArgs e)
        {
            GridFilterMenuTranslate.TranslateGridFilterMenu(ref RadGrid1);
        }

        void ClearMessage()
        {
            error.Visible = false;
            success.Visible = false;
            ltrError.Text = string.Empty;
            ltrSuccess.Text = string.Empty;
        }

        protected void RadGrid1_DeleteCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            string companyTypeID = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["ID"].ToString();
            try
            {
                var deleteObj = new CompanyType() { ID = Convert.ToInt32(companyTypeID) };
                if (companyTypeDao.CheckCompanyTypeInUse(deleteObj))
                {
                    error.Visible = true;
                    success.Visible = false;
                    ltrError.Text = "Loại hình doanh nghiệp này đang được sử dụng. Bạn không thể xóa.";
                    e.Canceled = true;
                    return;
                }
                if (companyTypeDao.Delete(deleteObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Xóa loại hình doanh nghiệp thành công.";
                    RadGrid1.Rebind();
                }
            }
            catch (Exception ex)
            {
                error.Visible = true;
                success.Visible = false;
                Tools.Logger("Error: " + ex.Message, "CompanyType", "DeleteCommand");
                ltrError.Text = "Có lỗi khi xóa loại hình doanh nghiệp. Vui lòng thử lại";
            }
        }
        
        protected void RadGrid1_InsertCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);

            CompanyType insertObj = new CompanyType() { ID = -1, IsActive = true };

            insertObj.Name = (userControl.FindControl("txtName") as TextBox).Text;
            insertObj.Code = (userControl.FindControl("txtCode") as TextBox).Text;
            insertObj.Description = (userControl.FindControl("txtDescription") as TextBox).Text.Trim();
            try
            {
                if (companyTypeDao.CheckCompanyTypeExisted(insertObj))
                {
                    error.Visible = true;
                    success.Visible = false;
                    ltrError.Text = "Đã tồn tại loại hình doanh nghiệp này trong hệ thống.";
                    e.Canceled = true;
                    return;
                }
                if (companyTypeDao.Insert(insertObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Thêm mới loại hình doanh nghiệp thành công";
                    RadGrid1.MasterTableView.IsItemInserted = true;
                    RadGrid1.MasterTableView.Rebind();
                }
            }
            catch (Exception ex)
            {
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Có lỗi khi thêm mới loại hình doanh nghiệp. Vui lòng thử lại";
                Tools.Logger("Error: " + ex.Message, "CompanyType", "InsertCommand");
                e.Canceled = true;
                return;
            }
        }

        protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            ClearMessage();
            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Pair laPaire = (Pair)e.CommandArgument;
                string a = RadGrid1.MasterTableView.FilterExpression;
                if (string.Compare((string)laPaire.Second, "Name") == 0)
                {
                    e.Canceled = true;

                    TextBox txtBox = (TextBox)((GridFilteringItem)e.Item)["Name"].Controls[0];
                    FiltreOriginalClient = txtBox.Text;

                    GridColumn colonneCachee = ((RadGrid)sender).MasterTableView.GetColumnSafe("NameFilter");
                    string newFilter = string.Format("(iif(NameFilter == null, \"\", {0}).ToString().ToUpper().Contains(\"{1}\".ToUpper()))", colonneCachee.UniqueName, Tools.RemoveDiacritics(txtBox.Text));
                    RadGrid1.MasterTableView.FilterExpression = newFilter;
                    RadGrid1.Rebind();
                }
            }
            if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToExcelCommandName)
            {
                ConfigureExport();
            }
        }

        void ConfigureExport()
        {
            RadGrid1.ExportSettings.ExportOnlyData = true;
            RadGrid1.ExportSettings.IgnorePaging = true;
            RadGrid1.ExportSettings.OpenInNewWindow = false;
            RadGrid1.ExportSettings.FileName = "CompanyTypeList";
        }

        protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            if (e.Item is GridFilteringItem)
            {
                GridFilteringItem filteringItem = e.Item as GridFilteringItem;
                (filteringItem["Code"].Controls[0] as TextBox).Width = Unit.Pixel(100);
            }
        }

        protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            if (e.Item.ItemType == GridItemType.FilteringItem)
            {
                if (!string.IsNullOrEmpty(((TextBox)((GridFilteringItem)e.Item)["NameFilter"].Controls[0]).Text) && !string.IsNullOrEmpty(FiltreOriginalClient))
                {
                    ((TextBox)((GridFilteringItem)e.Item)["Name"].Controls[0]).Text = FiltreOriginalClient;
                }
            }
        }

        protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            RadGrid1.DataSource = companyTypeDao.GetCompanyTypes();
        }

        protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e)
        {
            UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
            GridEditableItem editedItem = e.Item as GridEditableItem;
            string companyTypeID = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["ID"].ToString();
            CompanyType updateObj = companyTypeDao.GetCompanyTypeByID(Convert.ToInt32(companyTypeID));
            if (updateObj == null)
            {
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Không tìm thấy loại hình doanh nghiệp trong hệ thống.";
                e.Canceled = true;
                return;
            }

            updateObj.Name = (userControl.FindControl("txtName") as TextBox).Text;
            // not allow edit code
            //updateObj.Code = (userControl.FindControl("txtCode") as TextBox).Text;
            updateObj.Description = (userControl.FindControl("txtDescription") as TextBox).Text.Trim();

            try
            {
                if (companyTypeDao.CheckCompanyTypeExisted(updateObj))
                {
                    error.Visible = true;
                    success.Visible = false;
                    ltrError.Text = "Đã tồn tại loại hình doanh nghiệp này trong hệ thống.";
                    e.Canceled = true;
                    return;
                }
                if (companyTypeDao.Update(updateObj))
                {
                    error.Visible = false;
                    success.Visible = true;
                    ltrSuccess.Text = "Cập nhật loại hình doanh nghiệp thành công";
                    RadGrid1.MasterTableView.Rebind();
                }
            }
            catch (Exception ex)
            {
                //Label lblError = new Label();
                //lblError.Text = "Unable to insert Employees. Reason: " + ex.Message;
                //lblError.ForeColor = System.Drawing.Color.Red;
                //RadGrid1.Controls.Add(lblError);
                error.Visible = true;
                success.Visible = false;
                ltrError.Text = "Có lỗi khi Cập nhật loại hình doanh nghiệp. Vui lòng thử lại";
                Tools.Logger("Error: " + ex.Message, "CompanyType", "UpdateCommand");
                e.Canceled = true;
                return;
            }
        }
    }
}